package com.example.hrmspractice.domain;


import lombok.Data;

@Data
public class ApiResponse<T> {

    /**
     * 响应状态码
     */
    private int code;

    /**
     * 响应消息，通常用于错误提示
     */
    private String message;

    /**
     * 响应数据体
     */
    private T data;

    // 成功响应构造方法
    public ApiResponse(T data) {
        this.code = 200;
        this.message = "success";
        this.data = data;
    }

    // 错误响应构造方法
    public ApiResponse(int code, String message) {
        this.code = code;
        this.message = message;
    }

    // 成功响应静态方法
    public static <T> ApiResponse<T> success(T data) {
        return new ApiResponse<>(data);
    }

    // 无数据的成功响应静态方法
    public static <T> ApiResponse<T> success() {
        return new ApiResponse<>(null);
    }

    // 错误响应静态方法
    public static <T> ApiResponse<T> error(int code, String message) {
        return new ApiResponse<>(code, message);
    }
    // 错误响应静态方法，默认错误码
    public static <T> ApiResponse<T> error(String message) {
        return new ApiResponse<>(500, message);
    }
    // 预定义的错误响应静态方法
    public static <T> ApiResponse<T> badRequest(String message) {
        return error(400, message);
    }

    public static <T> ApiResponse<T> unauthorized(String message) {
        return error(401, message);
    }

    public static <T> ApiResponse<T> forbidden(String message) {
        return error(403, message);
    }

    public static <T> ApiResponse<T> notFound(String message) {
        return error(404, message);
    }

    public static <T> ApiResponse<T> internalServerError(String message) {
        return error(500, message);
    }

    // 自定义状态码和消息的错误响应静态方法
    public static <T> ApiResponse<T> customError(int code, String message) {
        return error(code, message);
    }
}
